#include <stdio.h>
// 最垃圾排序

void swapInt(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

// 选择排序 —— 升序
// 遍历一遍数组，找到最小的和最大的，分别放在数组最左和最右
// 重复，直到排完
void selectSort(int *a, int n)
{
    int left = 0;
    int right = n - 1;

    while (left < right)
    {
        int min = left; // 找到当前for循环中的最小值下标
        int max = left; // 找到当前for循环中的最大值下标
        for (int i = left + 1; i <= right; i++)
        {
            if (a[i] < a[min])
                min = i;
            if (a[i] > a[max])
                max = i;
        }

        swapInt(&a[left], &a[min]);
        if (max == left) // 排除 left和 max重叠的情况
        {
            max = min;
        }
        swapInt(&a[right], &a[max]);

        left++;
        right--;
    }
}

int main()
{
    int arr[] = {10, 9, 7, 5, 34, 4, 1, -10, -23, -5, 100, 666, 2333};
    int sz = sizeof(arr) / sizeof(arr[0]);
    selectSort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}